←Select platform

SetModalityLut(int,DicomModalityLutAttributes,int[],DicomSetImageFlags) Method

Summary

Sets the attributes that describe the Modality LUT.

Syntax
C#
VB
C++
Java
public void SetModalityLut( 
   int frameIndex, 
   DicomModalityLutAttributes attributes, 
   int[] data, 
   DicomSetImageFlags flags 
) 
Public Overloads Sub SetModalityLut( _ 
   ByVal frameIndex As Integer, _ 
   ByVal attributes As DicomModalityLutAttributes, _ 
   ByVal data() As Integer, _ 
   ByVal flags As DicomSetImageFlags _ 
)  
public void setModalityLut(int frameIndex, DicomModalityLutAttributes attributes, int[]data, int dicomSetImageFlags) 
public: 
void SetModalityLut(  
   int frameIndex, 
   DicomModalityLutAttributes^ attributes, 
   array<int>^ data, 
   DicomSetImageFlags flags 
)  

Parameters

frameIndex
A zero-based index that identifies the frame number in the dataset. If the dataset does not support Multi-frames, this parameter is ignored.

attributes
The Modality LUT attributes to set.

data
Array of integers that holds the "LUT Data".

flags
determines how the modality LUT is stored

Remarks

This method will set the attributes of the "Modality LUT Module". If you are trying to set the "Rescale Intercept" (0028,1052) and "Rescale Slope" (0028,1053), set IsRescaleSlopeIntercept to true, and populate RescaleIntercept and RescaleSlope with the new values. You can also populate RescaleType if you want to set "Rescale Type" (0028,1054).

If you are trying to set the elements under "Modality LUT Sequence", set IsModalityLutSequence to true, and populate FirstStoredPixelValueMapped, NumberOfEntries, EntryBits, and LutType. In this case, [data](" id="dataparameterlink" class="popuplink.html) should hold the "LUT Data" (0028,3006).

The Multi-frame Functional Groups module may have a Shared Functional Groups Sequence item, and/or a Per-frame Functional Groups Sequence item. Either of these items may have a Pixel Value Transformation Sequence (0028,9145) item. The flags parameter can be used to add or modify existing information in the Pixel Value Transformation Sequence. The following flags are used only if the Pixel Value Transformation Sequence does not already exist.

  • DicomSetImageFlags.MfgVoiLutPerFrame
  • DicomSetImageFlags.MfgModalityLutShared In this case, the sequence is placed in the sequence indicated by the flag (Per-frame Functional Groups Sequence or Shared Functional Groups Sequence). If a Pixel Value Transformation Sequence already exists in a DICOM dataset, uFlags is ignored and the sequence is placed in the location where sequences already exist.

The specific elements that are read or updated when using these flags are shown below: (0028,9145) Pixel Value Transformation Sequence child elements

Tag Name
(0028,1052) Rescale Intercept
(0028,1053) Rescale Slope
(0028,1054) Rescale Type

For a detailed discussion on Multi-frame Functional Groups see the topic Multi-frame Functional Groups.

Example

This example will initialize a new DICOM command set that supports Multi-frame functional groups Two modality LUT will be added to the dataset at the per frame level The modality LUT from the second frame is retrieved Finally, the modality LUT from the second frame is deleted

C#
VB
using Leadtools; 
using Leadtools.Dicom; 
 
///  
void DicomDataSet_SetModalityLut2Example() 
{ 
   DicomDataSet ds = new DicomDataSet(); 
   DicomDataSetInitializeFlags flags = 
      DicomDataSetInitializeFlags.ExplicitVR | 
      DicomDataSetInitializeFlags.LittleEndian | 
      DicomDataSetInitializeFlags.AddMandatoryElementsOnly | 
      DicomDataSetInitializeFlags.AddMandatoryModulesOnly 
      ; 
 
   // Initialize with class that supports multiframe functional groups 
   ds.Initialize(DicomClassType.EnhancedMRImageStorage, flags); 
 
   // Delete these items -- they will get added again later in the sample 
   // * Shared Functional Group2 Sequence 
   // * Per-frame Functional Group2 Sequence 
 
   DicomElement element = ds.FindFirstElement(null, DicomTag.PerFrameFunctionalGroupsSequence, false); 
   if (element != null) 
      ds.DeleteElement(element); 
 
   element = ds.FindFirstElement(null, DicomTag.SharedFunctionalGroupsSequence, false); 
   if (element != null) 
      ds.DeleteElement(element); 
 
   // Add a modality LUT on 0th frame 
   DicomModalityLutAttributes modalityLutAttributes = new DicomModalityLutAttributes(); 
 
   modalityLutAttributes.IsModalityLutSequence = false; 
   modalityLutAttributes.IsRescaleSlopeIntercept = true; 
   modalityLutAttributes.RescaleType = "UNSPECIFIED"; 
   modalityLutAttributes.RescaleIntercept = -128.0; 
   modalityLutAttributes.RescaleSlope = 1.0; 
   ds.SetModalityLut(0, modalityLutAttributes, null, DicomSetImageFlags.MfgModalityLutPerFrame); 
 
   // Add a second modality LUT on the 1st frame 
   modalityLutAttributes.RescaleIntercept = -156.0; 
   modalityLutAttributes.RescaleSlope = 1.1; 
   ds.SetModalityLut(1, modalityLutAttributes, null, DicomSetImageFlags.MfgModalityLutPerFrame); 
 
   // Retrieve the modality LUT attributes from second frame (frameIndex == 1) 
   DicomModalityLutAttributes modalityLutAttributes2 = ds.GetModalityLutAttributes(1); 
 
   string sMsg = string.Format("Slope: {0}\nIntercept: {1}\nRescaleType {2}", 
      modalityLutAttributes2.RescaleSlope, 
      modalityLutAttributes2.RescaleIntercept, 
      modalityLutAttributes2.RescaleType); 
   MessageBox.Show(sMsg); 
 
   // Finally, delete the second modality LUT 
   ds.DeleteModalityLut(1, DicomSetImageFlags.None); 
 
   // Save the file 
   ds.Save(Path.Combine(LEAD_VARS.ImagesDir, "Test.dcm"), DicomDataSetSaveFlags.None); 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images"; 
} 
Imports Leadtools 
Imports Leadtools.Dicom 
 
'''  
Private Sub DicomDataSet_SetModalityLut2Example() 
   Dim ds As DicomDataSet = New DicomDataSet() 
   Dim flags As DicomDataSetInitializeFlags = DicomDataSetInitializeFlags.ExplicitVR Or DicomDataSetInitializeFlags.LittleEndian Or 
      DicomDataSetInitializeFlags.AddMandatoryElementsOnly Or DicomDataSetInitializeFlags.AddMandatoryModulesOnly 
 
   ' Initialize with class that supports multiframe functional groups 
   ds.Initialize(DicomClassType.EnhancedMRImageStorage, flags) 
 
   ' Delete these items -- they will get added again later in the sample 
   ' * Shared Functional Group2 Sequence 
   ' * Per-frame Functional Group2 Sequence 
 
   Dim element As DicomElement = ds.FindFirstElement(Nothing, DicomTag.PerFrameFunctionalGroupsSequence, False) 
   If Not element Is Nothing Then 
      ds.DeleteElement(element) 
   End If 
 
   element = ds.FindFirstElement(Nothing, DicomTag.SharedFunctionalGroupsSequence, False) 
   If Not element Is Nothing Then 
      ds.DeleteElement(element) 
   End If 
 
   ' Add a modality LUT on 0th frame 
   Dim modalityLutAttributes As DicomModalityLutAttributes = New DicomModalityLutAttributes() 
 
   modalityLutAttributes.IsModalityLutSequence = False 
   modalityLutAttributes.IsRescaleSlopeIntercept = True 
   modalityLutAttributes.RescaleType = "UNSPECIFIED" 
   modalityLutAttributes.RescaleIntercept = -128.0 
   modalityLutAttributes.RescaleSlope = 1.0 
   ds.SetModalityLut(0, modalityLutAttributes, Nothing, DicomSetImageFlags.MfgModalityLutPerFrame) 
 
   ' Add a second modality LUT on the 1st frame 
   modalityLutAttributes.RescaleIntercept = -156.0 
   modalityLutAttributes.RescaleSlope = 1.1 
   ds.SetModalityLut(1, modalityLutAttributes, Nothing, DicomSetImageFlags.MfgModalityLutPerFrame) 
 
   ' Retrieve the modality LUT attributes from second frame (frameIndex == 1) 
   Dim modalityLutAttributes2 As DicomModalityLutAttributes = ds.GetModalityLutAttributes(1) 
 
   Dim sMsg As String = String.Format("Slope: {0}" & Constants.vbLf & "Intercept: {1}" & Constants.vbLf & "RescaleType {2}", 
                                      modalityLutAttributes2.RescaleSlope, modalityLutAttributes2.RescaleIntercept, modalityLutAttributes2.RescaleType) 
   MessageBox.Show(sMsg) 
 
   ' Finally, delete the second modality LUT 
   ds.DeleteModalityLut(1, DicomSetImageFlags.None) 
 
   ' Save the file 
   ds.Save(Path.Combine(LEAD_VARS.ImagesDir, "Test.dcm"), DicomDataSetSaveFlags.None) 
End Sub 
 
Public NotInheritable Class LEAD_VARS 
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images" 
End Class 
c#[Silverlight C# Example] 
using Leadtools; 
using Leadtools.Dicom; 
using Leadtools.Examples; 
 
void DicomDataSet_SetModalityLut2Example(Stream outputStream) 
{ 
   DicomDataSet ds = new DicomDataSet(); 
   DicomDataSetInitializeFlags flags = 
      DicomDataSetInitializeFlags.ExplicitVR | 
      DicomDataSetInitializeFlags.LittleEndian | 
      DicomDataSetInitializeFlags.AddMandatoryElementsOnly | 
      DicomDataSetInitializeFlags.AddMandatoryModulesOnly 
      ; 
 
   // Initialize with class that supports multiframe functional groups 
   ds.Initialize(DicomClassType.EnhancedMRImageStorage, flags); 
 
   // Delete these items -- they will get added again later in the sample 
   // * Shared Functional Group2 Sequence 
   // * Per-frame Functional Group2 Sequence 
 
   DicomElement element = ds.FindFirstElement(null, DicomTag.PerFrameFunctionalGroupsSequence, false); 
   if (element != null) 
      ds.DeleteElement(element); 
 
   element = ds.FindFirstElement(null, DicomTag.SharedFunctionalGroupsSequence, false); 
   if (element != null) 
      ds.DeleteElement(element); 
 
   // Add a modality LUT on 0th frame 
   DicomModalityLutAttributes modalityLutAttributes = new DicomModalityLutAttributes(); 
 
   modalityLutAttributes.IsModalityLutSequence = false; 
   modalityLutAttributes.IsRescaleSlopeIntercept = true; 
   modalityLutAttributes.RescaleType = "UNSPECIFIED"; 
   modalityLutAttributes.RescaleIntercept = -128.0; 
   modalityLutAttributes.RescaleSlope = 1.0; 
   ds.SetModalityLut(0, modalityLutAttributes, null, DicomSetImageFlags.MfgModalityLutPerFrame); 
 
   // Add a second modality LUT on the 1st frame 
   modalityLutAttributes.RescaleIntercept = -156.0; 
   modalityLutAttributes.RescaleSlope = 1.1; 
   ds.SetModalityLut(1, modalityLutAttributes, null, DicomSetImageFlags.MfgModalityLutPerFrame); 
 
   // Retrieve the modality LUT attributes from second frame (frameIndex == 1) 
   DicomModalityLutAttributes modalityLutAttributes2 = ds.GetModalityLutAttributes(1); 
 
   string sMsg = string.Format("Slope: {0}\nIntercept: {1}\nRescaleType {2}", 
      modalityLutAttributes2.RescaleSlope, 
      modalityLutAttributes2.RescaleIntercept, 
      modalityLutAttributes2.RescaleType); 
   Debug.WriteLine(sMsg); 
 
   // Finally, delete the second modality LUT 
   ds.DeleteModalityLut(1, DicomSetImageFlags.None); 
 
   // Save the file 
   ds.Save(outputStream, DicomDataSetSaveFlags.None); 
} 
vb[Silverlight VB Example] 
Imports Leadtools 
Imports Leadtools.Dicom 
 
Private Sub DicomDataSet_SetModalityLut2Example(ByVal outputStream As Stream) 
   Dim ds As DicomDataSet = New DicomDataSet() 
   Dim flags As DicomDataSetInitializeFlags = DicomDataSetInitializeFlags.ExplicitVR Or 
                                              DicomDataSetInitializeFlags.LittleEndian Or 
                                              DicomDataSetInitializeFlags.AddMandatoryElementsOnly Or 
                                              DicomDataSetInitializeFlags.AddMandatoryModulesOnly 
 
   ' Initialize with class that supports multiframe functional groups 
   ds.Initialize(DicomClassType.EnhancedMRImageStorage, flags) 
 
   ' Delete these items -- they will get added again later in the sample 
   ' * Shared Functional Group2 Sequence 
   ' * Per-frame Functional Group2 Sequence 
 
   Dim element As DicomElement = ds.FindFirstElement(Nothing, DicomTag.PerFrameFunctionalGroupsSequence, False) 
   If Not element Is Nothing Then 
      ds.DeleteElement(element) 
   End If 
 
   element = ds.FindFirstElement(Nothing, DicomTag.SharedFunctionalGroupsSequence, False) 
   If Not element Is Nothing Then 
      ds.DeleteElement(element) 
   End If 
 
   ' Add a modality LUT on 0th frame 
   Dim modalityLutAttributes As DicomModalityLutAttributes = New DicomModalityLutAttributes() 
 
   modalityLutAttributes.IsModalityLutSequence = False 
   modalityLutAttributes.IsRescaleSlopeIntercept = True 
   modalityLutAttributes.RescaleType = "UNSPECIFIED" 
   modalityLutAttributes.RescaleIntercept = -128.0 
   modalityLutAttributes.RescaleSlope = 1.0 
   ds.SetModalityLut(0, modalityLutAttributes, Nothing, DicomSetImageFlags.MfgModalityLutPerFrame) 
 
   ' Add a second modality LUT on the 1st frame 
   modalityLutAttributes.RescaleIntercept = -156.0 
   modalityLutAttributes.RescaleSlope = 1.1 
   ds.SetModalityLut(1, modalityLutAttributes, Nothing, DicomSetImageFlags.MfgModalityLutPerFrame) 
 
   ' Retrieve the modality LUT attributes from second frame (frameIndex == 1) 
   Dim modalityLutAttributes2 As DicomModalityLutAttributes = ds.GetModalityLutAttributes(1) 
 
   Dim sMsg As String = String.Format("Slope: {0}" _ 
                                      & Constants.vbLf _ 
                                      & "Intercept: {1}" _ 
                                      & Constants.vbLf _ 
                                      & "RescaleType {2}", 
                                      modalityLutAttributes2.RescaleSlope, 
                                      modalityLutAttributes2.RescaleIntercept, 
                                      modalityLutAttributes2.RescaleType) 
   Debug.WriteLine(sMsg) 
 
   ' Finally, delete the second modality LUT 
   ds.DeleteModalityLut(1, DicomSetImageFlags.None) 
 
   ' Save the file 
   ds.Save(outputStream, DicomDataSetSaveFlags.None) 
End Sub 

Requirements

Target Platforms

Help Version 20.0.2020.3.31
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2020 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Dicom Assembly